//package chapter05
//
//import org.apache.spark.sql.SparkSession
//import org.apache.spark.rdd.RDD
//import org.apache.spark.{HashPartitioner, SparkConf, SparkContext}
//
///**
// * author: yuhui
// * descriptions:
// * date: 2025 - 03 - 06 4:45 下午
// */
//object ShuffleDemo {
//
//  def main(args: Array[String]): Unit = {
//
//    // 创建SparkSession
//    val spark = SparkSession.builder()
//      .appName("Spark JDBC Read MySQL")
//      .config("spark.master", "local[*]") // 本地模式，使用所有可用核心
//      .getOrCreate()
//
//    import spark.implicits._
//
//    //创建RDD，并没有立即读取数据，而是触发Action才会读取数据
//    val lines = spark.textFile("hdfs://yuhui01:9000/words")
//    val wordAndOne = lines.flatMap(_.split(" ")).map((_, 1))
//
//    //先使用HashPartitioner进行partitionBy
//    val partitioner = new HashPartitioner(wordAndOne.partitions.length)
//    val partitioned = wordAndOne.partitionBy(partitioner)
//
//    //然后再调用reduceByKey
//    val reduced: RDD[(String, Int)] = partitioned.reduceByKey(_ + _)
//    reduced.saveAsTextFile("hdfs://yuhui01:9000/out-36-82")
//
//  }
//
//}